// 封装集合类
function Set() {
  // 属性
  this.items = {};

  // 方法
  //   1.add方法
  Set.prototype.add = function (value) {
    //判断当前集合是否已经包含该元素
    if (this.has(value)) {
      return false;
    }
    //将元素添加到集合中
    this.items[value] = value;
    return true;
  };

  //  2. has方法
  Set.prototype.has = function (value) {
    return this.items.hasOwnProperty(value);
  };

  //3.remove 方法
  Set.prototype.remove = function (value) {
    //1.判断当前集合是否已经包含该元素
    if (!this.has(value)) {
      return false;
    }
    //2.将元素从属性中删除
    delete this.items[value];
    return true;
  };

  //4.clear方法
  Set.prototype.clear = function () {
    this.items = {};
  };

  //5.size 方法
  Set.prototype.size = function () {
    return Object.keys(this.items).length;
  };

  //6.values 获取集合中所有的值
  Set.prototype.values = function () {
    return Object.keys(this.items);
  };
}

// 测试
let set = new Set();
set.add("AA");
console.log(set.add("AA"));
set.add("BB");
set.add("CC");
set.add("DD");
console.log(set);

console.log(set.remove("CC"));
console.log(set.remove("CC"));

console.log(set.size());
console.log(set.values());

set.clear();
console.log(set.values());
